package com.wh.wisdomsite.xbox.core.session.impl;


import com.wh.wisdomsite.xbox.common.session.Session;
import com.wh.wisdomsite.xbox.common.session.SessionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 会话管理器接口实现类（采用的是缓存容器, 与服务内存有关, 服务重启后, 缓存数据丢失）
 * @Package com.wh.wisdomsite.xbox.core.session.impl
 * @author 谢泽鹏
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public final class DefaultSessionManager implements SessionManager {

    private static final Log logger = LogFactory.getLog(DefaultSessionManager.class);

    /**
     * 会话缓存容器
     */
    private final Map<String, Session> sessionCache = new ConcurrentHashMap<String, Session>(128, 0.75f, 32);


    /**
     * 添加缓存会话
     * @param sessionId  会话标识
     * @param session    会话对象
     */
    @Override
    public void addSession(String sessionId, Session session) {
        sessionCache.put(sessionId, session);
    }

    @Override
    public void addSession(String sessionId, Session session, String attrKey) {
        sessionCache.put(sessionId, session);
    }


    /**
     * 添加缓存会话
     * @param sessionId  会话标识
     * @param session    会话对象
     * @param expiredTime  失效时长秒
     */
    @Override
    public void addSession(String sessionId, Session session, int expiredTime) {
        logger.info("addSession->>sessionId: " + sessionId + " session: " + session + "expiredTime: " + expiredTime);
        sessionCache.put(sessionId, session);
    }

    @Override
    public void addSession(String sessionId, Session session, int expiredTime, String attrKey) {
        logger.info("addSession->>sessionId: " + sessionId + " session: " + session + "expiredTime: " + expiredTime + "attrKey:" +attrKey);
        sessionCache.put(sessionId, session);
    }


    /**
     * 获取缓存会话
     * @param sessionId 会话标识
     * @return
     */
    @Override
    public Session getSession(String sessionId) {
        logger.info("getSession->>sessionId: " + sessionId);
        return sessionCache.get(sessionId);
    }


    /**
     * 删除缓存会话
     * @param sessionId 会话标识
     * @return
     */
    @Override
    public void removeSession(String sessionId) {
        logger.info("removeSession->>sessionId: " + sessionId);
        sessionCache.remove(sessionId);
    }


    /**
     * 添加其他缓存会话
     * @param sessionId
     * @param session
     * @param expiredTime
     */
    @Override
    public void addOtherSession(String sessionId, Session session, int expiredTime) {
        sessionCache.put(sessionId, session);
    }


    /**
     * 获取其他缓存会话
     * @param sessionId
     * @return
     */
    @Override
    public Session getOtherSession(String sessionId) {
        return sessionCache.get(sessionId);
    }


    /**
     * 删除其他缓存会话
     * @param sessionId 会话标识
     */
    @Override
    public void removeOtherSession(String sessionId) {
        logger.info("removeSession->>sessionId: " + sessionId);
        sessionCache.remove(sessionId);
    }



}